package com.ara.web.ui.page;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.widget.FrameLayout;

import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.ara.base.ui.page.BaseActivity;
import com.ara.web.BR;
import com.ara.web.R;
import com.ara.web.data.api.WebRouterApi;
import com.ara.web.ui.state.WebActivityViewModel;
import com.ara.web.ui.view.XWebLayout;
import com.just.agentweb.WebChromeClient;
import com.just.agentweb.WebViewClient;
import com.kunminx.architecture.ui.page.DataBindingConfig;

/**
 * Created by XieXin on 2022/2/24.
 * 复制模块Main
 */
@Route(path = WebRouterApi.API_WEB)
public class WebActivity extends BaseActivity {
    private WebActivityViewModel mState;
    private AgentWeb agentWeb;

    @Autowired
    String url;

    @Override
    protected void initViewModel() {
        mState = getActivityScopeViewModel(WebActivityViewModel.class);
    }

    @Override
    protected DataBindingConfig getDataBindingConfig() {
        return new DataBindingConfig(R.layout.web_activity_web, BR.vm, mState)
                .addBindingParam(BR.click, new ClickProxy());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ARouter.getInstance().inject(this);
        initWeb(url);
    }

    private void initWeb(String url) {
        mState.flWeb.setValue(new FrameLayout(getContext()));
        agentWeb = AgentWeb.with(getActivity())//
                .setAgentWebParent(mState.flWeb.getValue(), -1, new FrameLayout.LayoutParams(-1, -1))//传入AgentWeb的父控件。
//                .closeIndicator()
                .useDefaultIndicator(-1, 3)//设置进度条颜色与高度，-1为默认值，高度为2，单位为dp。
//                .setAgentWebWebSettings(getSettings())//设置 IAgentWebSettings。
                .setWebViewClient(webViewClient)//WebViewClient ， 与 WebView 使用一致 ，但是请勿获取WebView调用setWebViewClient(xx)方法了,会覆盖AgentWeb DefaultWebClient,同时相应的中间件也会失效。
                .setWebChromeClient(webChromeClient) //WebChromeClient
//                .setPermissionInterceptor(mPermissionInterceptor) //权限拦截 2.0.0 加入。
                .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) //严格模式 Android 4.2.2 以下会放弃注入对象 ，使用AgentWebView没影响。
//                .setAgentWebUIController(new UIController(getActivity())) //自定义UI  AgentWeb3.0.0 加入。
                .setMainFrameErrorView(com.pensoon.web.R.layout.web_agentweb_error_page, com.pensoon.web.R.id.llError) //参数1是错误显示的布局，参数2点击刷新控件ID -1表示点击整个布局都刷新， AgentWeb 3.0.0 加入。
//                .useMiddlewareWebChrome(getMiddlewareWebChrome()) //设置WebChromeClient中间件，支持多个WebChromeClient，AgentWeb 3.0.0 加入。
//                .additionalHttpHeader(url, "cookie", "41bc7ddf04a26b91803f6b11817a5a1c")
//                .useMiddlewareWebClient(getMiddlewareWebClient()) //设置WebViewClient中间件，支持多个WebViewClient， AgentWeb 3.0.0 加入。
                .setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他页面时，弹窗质询用户前往其他应用 AgentWeb 3.0.0 加入。
                .interceptUnkownUrl() //拦截找不到相关页面的Url AgentWeb 3.0.0 加入。
//                .isInterceptUnkownUrl(false)
                .createAgentWeb()//创建AgentWeb。
                .ready()//设置 WebSettings。
                .go(url);//WebView载入该url地址的页面并显示。在gradle配置-

    }

    @Override
    protected void onResume() {
        if (agentWeb != null) agentWeb.getWebLifeCycle().onResume();//恢复
        super.onResume();
    }

    @Override
    public void onPause() {
        // 暂停应用内所有WebView ， 调用mWebView.resumeTimers();
        // mAgentWeb.getWebLifeCycle().onResume(); 恢复。
        if (agentWeb != null) agentWeb.getWebLifeCycle().onPause();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        if (agentWeb != null) agentWeb.getWebLifeCycle().onDestroy();
        super.onDestroy();
    }

    private final WebViewClient webViewClient = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            //do you  work
            Log.i("Info", "BaseWebActivity onPageStarted");
        }
    };
    private final WebChromeClient webChromeClient = new WebChromeClient() {
        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            mState.title.setValue(title);
        }
    };

    public class ClickProxy {
        private WebMoreDialog webMoreDialog;

        public void more() {
            if (webMoreDialog == null) {
                webMoreDialog = new WebMoreDialog(url);
            }
            webMoreDialog.show(getSupportFragmentManager(), "WebMoreDialog");
        }
    }

}